package 链表;

/**
 * https://leetcode-cn.com/problems/swap-nodes-in-pairs/
 * @author  会玩的洋洋
 */
public class _24_两两交换链表中的节点 {

    /**
     * 迭代遍历
     * 定义一个链表，将头的下一个指向head, 将temp.next指向于第二个节点node2，在将node1指向node2.next 即node3
     * 再将node2.next指向于node1，实现node1和node2的互换，最后将指针指向node1，即原来node2的位置
     * @param head 头结点
     * @return ListNode
     */
    public ListNode swapPairs(ListNode head) {
        ListNode dummyHead  = new ListNode(0);
        dummyHead.next = head;
        ListNode temp = dummyHead;
        while (temp.next != null && temp.next.next != null) {
            ListNode node1 = temp.next;
            ListNode node2 = temp.next.next;
            // 交换操作
            temp.next = node2;
            node1.next = node2.next;
            node2.next = node1;
            temp = node1;
        }
        return dummyHead.next;
    }
}
